public class CurrentConditionsDisplay implements Observer,DisplayElement{
    private float temperature;
    private float humidity;
    private Subject weatherData;

    public CurrentConditionsDisplay(Subject weatherData){
        this.weatherData = weatherData; //
        weatherData.registerObserver(this); // 注册observer同时包括了this.weatherData不会有问题吗
    }

    @Override
    public void update(float temp, float humidity, float pressure) {
        this.temperature = temp;
        this.humidity = humidity;
        display();
    }

    @Override
    public void display() {
        System.out.println("Current conditions:" + temperature + "F degrees and " + humidity + "% humdidity");
    }
}
/*
这里实现了两个接口Observer,DisplayElement

我的理解是接口隔离原则，observer只负责作为订阅者，订阅者必须知道主题是谁，所以在初始化订阅者是要传入主题，同时主题要需要订阅者
所以主题提供了两个方法registerObserver和removeObserver来让订阅者注册。

主题者知道订阅者是通过registerObserver来达成
而Observer知道主题是通过类构造传进主题对象

订阅者接收通知是通过update方法，而展示是通过display.这两个分成两个接口，因为diplay是属于展示，展示形式可能多样，根据单一原则接口最小化
隔离原则把display分到另一个接口里。

代码写到这里，还有一个问题点是，setmetaurement和update的参数是强耦合的


关于主题对订阅者的通知，在这里主要是update

当然书中还有一个例子，就是在主题变更时，update函数，传入主题对象给Observer(订阅者），让订阅者来主动通过主题对象拉并且展示

但这随之而来的是当主题会被阻塞在订阅者拉数据和展示数据
 */